package com.wakyde.jvm;

/**
 * jvm内存结构
 */
public class MemoryContract {
    public static void main(String[] args) {

        /*
        JDK1.8
            运行时区域内存
                |__线程共享
                    |__堆 （对象的实例以及数组）
                        |__字符串常量池
                    |__方法区
                |__线程私有
                    |__程序计数器 (用来计字节码的行数)
                    |__Java虚拟机栈 (java方法的先进后出) 栈由多个栈帧组成， 栈帧包括局部变量表，操作数栈，动态链接（在调用别的方法的时候用到，将符号引用转换为直接引用），方法返回地址
                    |__本地方法栈 （native声明的代码）跟Java虚拟栈一样，区别在于一个是本地方法，一个是java方法
            本地内存
                |__元空间
                    |__运行时常量池（存放编译器产生的各种字面量和符号引用的常量表池） 字面量：包括整数，浮点数，字符串。 符号引用：字段符号，方法符号，接口方法符号
                |__直接内存（一种特殊的内存缓冲区，不在java堆或方法区中分配）
         */

        /*
        JDK1.7
            运行时区域内存
                |__线程共享
                    |__堆 （对象创建的实例）
                        |__字符串常量池
                    |__方法区
                        |__运行时常量池
                |__线程私有
                    |__程序计数器 (用来计字节码的行数)
                    |__Java虚拟机栈 (方法调用时入栈和调用完出栈)
                    |__本地方法栈 （native声明的代码）
            本地内存
                |__直接内存
         */
    }
}
